#pragma once
//客户端
#include <iostream>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string>
#include <unistd.h>
#include "InetAddr.hpp"

//我们期望的输入样例：  【./可执行程序 IP  端口号】
int main(int argc,char* argv[])
{
    if(argc!=3)
    {
        std::cout<<"输入格式 不规范"<<std::endl;
        exit(1);
    }

    //先提取出从命令行中获取的IP和端口号
    std::string serverip=argv[1];//IP
    uint16_t serverport=std::stoi(argv[2]);//port

    //1,创建套接字
    int sockfd=socket(AF_INET,SOCK_STREAM,0);
    if(sockfd<0)
    {
        std::cerr<<"创建套接字失败"<<std::endl;
        exit(2);
    }
    std::cout<<"创建套接字成功"<<sockfd<<std::endl;

    
    //2,bind不需要我们手动绑定了
    //3，建立连接
    InetAddr addr(serverip,serverport);//这一句就搞定了
    int n=connect(sockfd,addr.NetAddrPtr(),addr.NetAddrLen());
    if(n<0)
    {
        std::cerr<<"connect err"<<std::endl;
        exit(CONNECT_ERR);
    }
    std::cout<<"connect success"<<std::endl;

    while(true)
    {
        std::string line;
        std::cout<<"Please Enter## ";
        std::getline(std::cin,line);

        write(sockfd,line.c_str(),line.size());

        //获取数据
        //定义一个缓冲区 
        char buffer[1024];
        ssize_t s=read(sockfd,buffer,sizeof(buffer)-1);
        //成功读取服务器发来的消息
        if(s>0)
        {
            buffer[s]=0;
            std::cout<<"sever echo# "<<buffer<<std::endl;
        }
    }
    close(sockfd);

    return 0;
}